﻿Public Class perCliente
    Inherits perPadrao

#Region "Propriedades publicas"
    Public ReadOnly Property sqlConsulta(ByVal bIncluiInativos As Boolean) As String
        Get
            Dim sSql As String

            sSql = "SELECT IDCliente, RazaoSocial " & vbCrLf
            sSql &= "  FROM DC_Clientes" & vbCrLf

            If (Not bIncluiInativos) Then
                sSql &= "LEFT JOIN DC_Status ON DC_Clientes.idStatus = DC_Status.IdStatus" & vbCrLf
                sSql &= "    WHERE(ISNULL(DC_Status.TornaInativo, 0) = 0)" & vbCrLf
            End If

            sSql &= " ORDER BY RazaoSocial"
            Return sSql
        End Get
    End Property
#End Region

#Region "Declaração de variáveis"

    Private objBuscaId As New perProximoId

#End Region

#Region "Métodos"

    Public Function inserirCliente(ByVal sRazaoSocial As String, _
                                  ByVal sNomeFantasia As String, _
                                  ByVal sEndereco As String, _
                                  ByVal sTelefone As String, _
                                  ByVal sEmail As String, _
                                  ByVal sCPF As String, _
                                  ByVal iIdBairro As Int32, _
                                  ByVal iIdCidade As Int32, _
                                  ByVal iIdEstado As Int32, _
                                  ByVal sCEP As String, _
                                  ByVal iIdStatus As Int32, _
                                  ByVal iTpPessoa As Int32, _
                                  ByVal sCNPJ As String, _
                                  ByVal sInsc As String, _
                                  ByVal sObservacoes As String, _
                                  ByVal iIdRegiao As Int32, _
                                  ByVal iIdUsuario As Int32, _
                                  ByVal dtProxContato As Date, _
                                  ByVal iIdRamoAtividade As Int32) As Int32

        Dim iIdCliente As Int32
        Dim sSql As String

        Try
            iIdCliente = Me.objBuscaId.BuscaID("IDCliente", "DC_Clientes")

            sSql = "  INSERT INTO DC_Clientes "
            sSql &= " ( "
            sSql &= "   IDCliente, "
            sSql &= "   RazaoSocial, "
            sSql &= "   NomeFantasia, "
            sSql &= "   Endereco, "
            sSql &= "   Telefone, "
            sSql &= "   Email, "
            sSql &= "   IdBairro, "
            sSql &= "   IdEstado, "
            sSql &= "   IdCidade, "
            sSql &= "   CEP, "
            sSql &= "   IdStatus, "
            sSql &= "   TipoPessoa, "
            sSql &= "   CNPJ, "
            sSql &= "   InscEstadual, "
            sSql &= "   Observacoes, "
            sSql &= "   IdUsuarioCad, "
            sSql &= "   IdRegiao, "
            sSql &= "   IDRamoAtividade "
            sSql &= " ) "
            sSql &= " VALUES "
            sSql &= " ( @IDCliente, @RazaoSocial, @NomeFantasia, @Endereco, @Telefone, @Email, "
            sSql &= "   @IDBairro, @IDEstado, @IDCidade, @CEP, @IDStatus, @TipoPessoa, "
            sSql &= "   @CNPJ, @InscEstadual, @Observacoes, @IDUsuario, @IDRegiao, @IDRamoAtividade "
            sSql &= " ) "

            With MyBase.SQLCmd.Parameters
                .Clear()
                .AddWithValue("@IDCliente", iIdCliente)
                .AddWithValue("@RazaoSocial", sRazaoSocial)
                .AddWithValue("@NomeFantasia", sNomeFantasia)
                .AddWithValue("@Endereco", sEndereco)
                .AddWithValue("@Telefone", sTelefone)
                .AddWithValue("@Email", sEmail)
                .AddWithValue("@IDBairro", perConversao.zeroParaNulo(iIdBairro))
                .AddWithValue("@IDEstado", perConversao.zeroParaNulo(iIdEstado))
                .AddWithValue("@IDCidade", perConversao.zeroParaNulo(iIdCidade))
                .AddWithValue("@CEP", sCEP)
                .AddWithValue("@IDStatus", perConversao.nuloParaZero(iIdStatus))
                .AddWithValue("@TipoPessoa", iTpPessoa)
                .AddWithValue("@CNPJ", sCNPJ)
                .AddWithValue("@InscEstadual", sInsc)
                .AddWithValue("@Observacoes", sObservacoes)
                .AddWithValue("@IDUsuario", perConversao.zeroParaNulo(iIdUsuario))
                .AddWithValue("@IDRegiao", perConversao.zeroParaNulo(iIdRegiao))
                .AddWithValue("@IDRamoAtividade", perConversao.zeroParaNulo(iIdRamoAtividade))
            End With

            MyBase.executarAcao(sSql)

            Return iIdCliente
        Catch ex As Exception
            Throw New Exception("Exceção no método 'inserirCliente'. " & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try

    End Function

    Public Sub AlterarCliente(ByVal iIDCliente As Int32, _
                         ByVal sRazaoSocial As String, _
                         ByVal sNomeFantasia As String, _
                         ByVal sEndereco As String, _
                         ByVal sTelefone As String, _
                         ByVal sEmail As String, _
                         ByVal sCPF As String, _
                         ByVal iIdBairro As Int32, _
                         ByVal iIdCidade As Int32, _
                         ByVal iIdEstado As Int32, _
                         ByVal sCEP As String, _
                         ByVal iIdStatus As Int32, _
                         ByVal iTpPessoa As Int32, _
                         ByVal sCNPJ As String, _
                         ByVal sInsc As String, _
                         ByVal sObservacoes As String, _
                         ByVal iIdRegiao As Int32, _
                         ByVal iIdUsuario As Int32, _
                         ByVal dtProxContato As Date, _
                         ByVal iIdRamoAtividade As Int32)

        Dim sSql As String

        Try

            sSql = "  UPDATE DC_Clientes SET "
            sSql &= "   RazaoSocial = @RazaoSocial, "
            sSql &= "   NomeFantasia = @NomeFantasia, "
            sSql &= "   Endereco = @Endereco, "
            sSql &= "   Telefone = @Telefone, "
            sSql &= "   Email = @Email, "
            sSql &= "   CEP = @CEP, "
            sSql &= "   CNPJ = @CNPJ, "
            sSql &= "   IDBairro = @IDBairro, "
            sSql &= "   IDCidade = @IDCidade, "
            sSql &= "   IDEstado = @IDEstado, "
            sSql &= "   IDStatus = @IDStatus, "
            sSql &= "   TipoPessoa = @TipoPessoa, "
            sSql &= "   InscEstadual = @InscEstadual, "
            sSql &= "   Observacoes = @Observacoes, "
            sSql &= "   IDRegiao = @IDRegiao, "
            sSql &= "   IDUsuarioCad = @IDUsuario, "
            sSql &= "   ProximoContato = @ProximoContato, "
            sSql &= "   IDRamoAtividade = @IDRamoAtividade "
            sSql &= " WHERE "
            sSql &= "   IDCliente = @IDCliente "

            With MyBase.SQLCmd.Parameters
                .Clear()
                .AddWithValue("@RazaoSocial", sRazaoSocial)
                .AddWithValue("@NomeFantasia", sNomeFantasia)
                .AddWithValue("@Endereco", sEndereco)
                .AddWithValue("@Telefone", sTelefone)
                .AddWithValue("@Email", sEmail)
                .AddWithValue("@CEP", sCEP)
                .AddWithValue("@CNPJ", sCNPJ)
                .AddWithValue("@IDBairro", perConversao.zeroParaNulo(iIdBairro))
                .AddWithValue("@IDEstado", perConversao.zeroParaNulo(iIdEstado))
                .AddWithValue("@IDCidade", perConversao.zeroParaNulo(iIdCidade))
                .AddWithValue("@IDStatus", perConversao.zeroParaNulo(iIdStatus))
                .AddWithValue("@TipoPessoa", iTpPessoa)
                .AddWithValue("@InscEstadual", sInsc)
                .AddWithValue("@Observacoes", sObservacoes)
                .AddWithValue("@IDRegiao", perConversao.zeroParaNulo(iIdRegiao))
                .AddWithValue("@IDUsuario", perConversao.zeroParaNulo(iIdUsuario))
                .AddWithValue("@ProximoContato", dtProxContato)
                .AddWithValue("@IDRamoAtividade", perConversao.zeroParaNulo(iIdRamoAtividade))
                .AddWithValue("@IDCliente", iIDCliente)
            End With

            MyBase.executarAcao(sSql)

        Catch ex As Exception
            Throw New Exception("Exceção no método 'alterarPessoa'. " & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try

    End Sub

    Public Sub excluirPessoa(ByVal iIdPessoa As Int32)

        Dim sSql As String

        Try
            sSql = "  DELETE FROM "
            sSql &= "   DC_Clientes "
            sSql &= " WHERE "
            sSql &= "   IDCliente = " & iIdPessoa

            MyBase.executarAcao(sSql)

        Catch ex As Exception

            Throw New Exception("Exceção no método 'excluirPessoa'. " & Environment.NewLine & Environment.NewLine & ex.Message)

        End Try

    End Sub

    Public Function selecionarCliente(ByVal iIDCliente As Int32) As DataRow
        Dim sSql As String
        Dim dsDados As New DataSet

        Try
            sSql = " SELECT DC_Clientes.*,DC_Status.Descricao "
            sSql &= " FROM DC_Clientes "
            sSql &= " LEFT JOIN DC_Status ON DC_Clientes.idStatus = DC_Status.idStatus "
            sSql &= " WHERE IDCliente = " & iIDCliente

            dsDados = MyBase.executarConsulta(sSql, "DC_Clientes")

            If Not dsDados Is Nothing AndAlso dsDados.Tables("DC_Clientes").Rows.Count > 0 Then
                Return dsDados.Tables("DC_Clientes").Rows(0)
            Else
                Return Nothing
            End If

        Catch ex As Exception
            Throw New Exception("Exceção no método 'selecionarCliente'. " & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try

    End Function
    Public Function selecionaCliente(ByVal iIDCliente As Int32, _
                                  ByVal iIDRegiao As Int32, _
                                  ByVal iIDStatus As Int32) As DataTable
        Dim sSql As String
        Dim dsDados As New DataSet

        Try
            sSql = "SELECT "
            sSql &= "   DC_Clientes.IDCliente, "
            sSql &= "   DC_Clientes.RazaoSocial, "
            sSql &= "   DC_Clientes.Endereco, "
            sSql &= "   DC_Clientes.Telefone, "
            sSql &= "   DC_Clientes.Email, "
            sSql &= "   DC_Clientes.CEP, "
            sSql &= "   DC_Clientes.TipoPessoa, "
            sSql &= "   DC_Clientes.CNPJ, "
            sSql &= "   DC_Clientes.InscEstadual, "
            sSql &= "   DC_Clientes.ProximoContato, "
            sSql &= "   DC_Bairros.Bairro, "
            sSql &= "   DC_Cidades.Cidade, "
            sSql &= "   DC_Estados.Estado, "
            sSql &= "   DC_Status.Descricao as Status, "
            sSql &= "   DC_Regioes.Regiao, "
            sSql &= "   DC_Contatos.IDContato, "
            sSql &= "   DC_Contatos.IDCliente, "
            sSql &= "   DC_Contatos.NomeContato, "
            sSql &= "   DC_Contatos.Telefone as TelefoneContato, "
            sSql &= "   DC_Contatos.Celular, "
            sSql &= "   DC_Contatos.Fax, "
            sSql &= "   DC_Contatos.Email as EmailContato, "
            sSql &= "   DC_Departamentos.Descricao as Departamento, "
            sSql &= "   COUNT(DC_Contatos.IDContato) as TotalContato "
            sSql &= "FROM DC_Clientes "
            sSql &= "   LEFT JOIN DC_Bairros ON DC_Bairros.IDBairro = DC_Clientes.IDBairro "
            sSql &= "   LEFT JOIN DC_Cidades ON DC_Clientes.IDCidade = DC_Cidades.IDCidade "
            sSql &= "   LEFT JOIN DC_Estados ON DC_Clientes.IDEstado = DC_Estados.IDEstado "
            sSql &= "   LEFT JOIN DC_Status ON DC_Clientes.IDStatus = DC_Status.IDStatus "
            sSql &= "   LEFT JOIN DC_Regioes ON DC_Clientes.IDRegiao = DC_Regioes.IDRegiao "
            sSql &= "   LEFT JOIN DC_Contatos ON DC_Clientes.IDCliente = DC_Contatos.IDCliente "
            sSql &= "   LEFT JOIN DC_Departamentos ON DC_Contatos.IDDepartamento = DC_Departamentos.IDDepartamento "

            If iIDCliente > 0 Then
                sSql &= " WHERE DC_Clientes.IDCliente = " & iIDCliente
            Else
                sSql &= " WHERE DC_Clientes.IDCliente <> 0 "
            End If

            If iIDRegiao > 0 Then
                sSql &= " AND DC_Regioes.IDRegiao = " & iIDRegiao
            End If

            If iIDStatus > 0 Then
                sSql &= " AND DC_Status.IDStatus = " & iIDStatus
            End If

            sSql &= "GROUP BY "
            sSql &= "   DC_Clientes.IDCliente, "
            sSql &= "   DC_Clientes.RazaoSocial, "
            sSql &= "   DC_Clientes.Endereco, "
            sSql &= "   DC_Clientes.Telefone, "
            sSql &= "   DC_Clientes.Email, "
            sSql &= "   DC_Clientes.Cep, "
            sSql &= "   DC_Clientes.TipoPessoa, "
            sSql &= "   DC_Clientes.CNPJ, "
            sSql &= "   DC_Clientes.InscEstadual, "
            sSql &= "   DC_Clientes.ProximoContato, "
            sSql &= "   DC_Bairros.Bairro, "
            sSql &= "   DC_Cidades.Cidade, "
            sSql &= "   DC_Estados.Estado, "
            sSql &= "   DC_Status.Descricao, "
            sSql &= "   DC_Regioes.Regiao, "
            sSql &= "   DC_Contatos.IDContato, "
            sSql &= "   DC_Contatos.IDCliente, "
            sSql &= "   DC_Contatos.NomeContato, "
            sSql &= "   DC_Contatos.Telefone, "
            sSql &= "   DC_Contatos.Celular, "
            sSql &= "   DC_Contatos.Fax, "
            sSql &= "   DC_Contatos.Email, "
            sSql &= "   DC_Departamentos.Descricao "

            dsDados = MyBase.executarConsulta(sSql, "DC_Clientes")

            If Not dsDados Is Nothing AndAlso dsDados.Tables("DC_Clientes").Rows.Count > 0 Then
                Return dsDados.Tables("DC_Clientes")
            Else
                Return Nothing
            End If

        Catch ex As Exception
            Throw New Exception("Exceção no método 'selecionarCliente'. " & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try

    End Function
    Public Function RetornarClientesPorDataContato(ByVal DtBase As Date, ByVal bSomenteAtrasados As Boolean, _
                                                   ByVal iIDCliente As Int32, _
                                                   ByVal iIDStatus As Int32, _
                                                   ByVal iIDContato As Int32) As DataTable
        Dim dsDados As New DataSet
        Dim sSql As String

        Try
            sSql = ""
            sSql &= "   SELECT DC_Clientes.IDCliente, DC_Clientes.RazaoSocial, DC_Clientes.IDStatus," & vbCrLf
            sSql &= "          CASE ISNULL (DC_Clientes.IDStatus, 0) when 0 then '" & DtBase & "' ELSE DC_Clientes.ProximoContato END AS ProximoContato," & vbCrLf
            sSql &= "           DC_Contatos.idContato, DC_Contatos.NomeContato, " & vbCrLf
            sSql &= "          DC_Status.Descricao, DC_Status.Tolerancia, DC_Clientes.IDRegiao, " & vbCrLf
            sSql &= "          CASE ISNULL(DC_Clientes.IDStatus,0) WHEN 0 THEN 3 ELSE" & vbCrLf
            sSql &= "          (CASE ISNULL(DC_AgendaLigacoes.Hora,'0') WHEN '0' THEN 2 ELSE 1 END) END AS OrdemHora, " & vbCrLf
            sSql &= "          DC_AgendaLigacoes.Hora" & vbCrLf
            sSql &= "     FROM DC_Clientes" & vbCrLf
            sSql &= "LEFT JOIN DC_Contatos ON " & vbCrLf
            sSql &= "           DC_Clientes.IDCliente = DC_Contatos.IDCliente" & vbCrLf
            sSql &= "           AND DC_Contatos.principal = 1" & vbCrLf
            sSql &= "LEFT JOIN DC_Status ON" & vbCrLf
            sSql &= "          DC_Clientes.IDStatus = DC_Status.IDStatus" & vbCrLf
            sSql &= "LEFT JOIN DC_AgendaLigacoes On " & vbCrLf
            sSql &= "           DC_AgendaLigacoes.IdCliente = DC_Clientes.IDCliente" & vbCrLf

            If (bSomenteAtrasados) Then
                sSql &= "    WHERE DC_Clientes.ProximoContato < '" & DtBase & "'" & vbCrLf
            Else
                sSql &= "    WHERE (DC_Clientes.ProximoContato <= '" & DtBase & "' or DC_Clientes.ProximoContato is null)" & vbCrLf
            End If

            If iIDCliente > 0 Then
                sSql &= "       AND DC_Clientes.IDCliente = " & iIDCliente & vbCrLf
            End If
            If iIDStatus > 0 Then
                sSql &= "       AND DC_Status.IDStatus = " & iIDStatus & vbCrLf
            End If
            If iIDContato > 0 Then
                sSql &= "       AND DC_Contatos.IDContato = " & iIDContato & vbCrLf
            End If
            sSql &= "       AND ISNULL(DC_Status.TornaInativo,0) = 0" & vbCrLf
            sSql &= "       AND DC_Clientes.IDCliente not in(SELECT IDCliente " & vbCrLf
            sSql &= "                                           FROM DC_CadVisitas" & vbCrLf
            sSql &= "                                          WHERE DataVisita >='" & DtBase & "')" & vbCrLf
            sSql &= "       AND DC_Clientes.IDCliente not in(SELECT DISTINCT(IDCliente)" & vbCrLf
            sSql &= "                                           FROM DC_OrdensServico" & vbCrLf
            sSql &= "                                          WHERE not DtEntrada is null and DtBaixa is null)" & vbCrLf

            sSql &= "    ORDER BY OrdemHora, ProximoContato, DC_AgendaLigacoes.Hora ASC"

            dsDados = MyBase.executarConsulta(sSql, "DC_Clientes")

            If Not dsDados Is Nothing AndAlso dsDados.Tables("DC_Clientes").Rows.Count > 0 Then
                Return dsDados.Tables("DC_Clientes")
            Else
                Return Nothing
            End If

        Catch ex As Exception

            Throw New Exception("Exceção no método 'RetornarClientesPorDataContato'. " & Environment.NewLine & Environment.NewLine & ex.Message)

        End Try

    End Function
    Public Function selecionaCliente(ByVal iIDCliente As Int32) As DataTable
        Dim sSql As String
        Dim dsDados As New DataSet

        Try
            sSql = " SELECT * FROM DC_Clientes "
            If iIDCliente > 0 Then
                sSql &= " WHERE IDCliente = " & iIDCliente
            End If

            dsDados = MyBase.executarConsulta(sSql, "DC_Clientes")

            If Not dsDados Is Nothing AndAlso dsDados.Tables("DC_Clientes").Rows.Count > 0 Then
                Return dsDados.Tables("DC_Clientes")
            Else
                Return Nothing
            End If

        Catch ex As Exception
            Throw New Exception("Exceção no método 'selecionarCliente'. " & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try

    End Function
    Public Function RetornaProximoContato(ByVal idCliente As Int32) As Date
        Try

        Catch ex As Exception
            Throw New Exception("Exceção no método 'RetornaProximoContato'. " & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try
    End Function
    Public Function AtualizaDataProximoContato(ByVal iIDCliente As Int32, ByVal dtProxContato As Date) As Boolean
        Dim sSql As String

        Try
            sSql = "UPDATE DC_Clientes " & vbCrLf
            sSql &= "  SET ProximoContato = '" & dtProxContato.Date & "'" & vbCrLf
            sSql &= "WHERE IDCliente = " & iIDCliente

            MyBase.executarAcao(sSql)
            Return True

        Catch ex As Exception
            Throw New Exception("Exceção no método 'AtualizaDataProximoContato'. " & Environment.NewLine & Environment.NewLine & ex.Message)
            Return False
        End Try

    End Function

#End Region

End Class
